home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / pluginy Firefox / 7684 / 7684.xpi / chrome / firefm.jar / content / fmErrorDialog.js < prev    next >
Text File  |  2009-06-02  |  5KB  |  137 lines

  1. /**
  2.  * Copyright (c) 2008, Jose Enrique Bolanos, Jorge Villalobos
  3.  * All rights reserved.
  4.  *
  5.  * Redistribution and use in source and binary forms, with or without
  6.  * modification, are permitted provided that the following conditions are met:
  7.  *
  8.  *  * Redistributions of source code must retain the above copyright notice,
  9.  *    this list of conditions and the following disclaimer.
  10.  *  * Redistributions in binary form must reproduce the above copyright notice,
  11.  *    this list of conditions and the following disclaimer in the documentation
  12.  *    and/or other materials provided with the distribution.
  13.  *  * Neither the name of Jose Enrique Bolanos, Jorge Villalobos nor the names
  14.  *    of its contributors may be used to endorse or promote products derived
  15.  *    from this software without specific prior written permission.
  16.  *
  17.  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
  18.  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
  19.  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
  20.  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
  21.  * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
  22.  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
  23.  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
  24.  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
  25.  * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
  26.  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
  27.  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  28.  **/
  29.  
  30. Components.utils.import("resource://firefm/fmCommon.js");
  31. Components.utils.import("resource://firefm/fmPlayerInitializer.js");
  32. Components.utils.import("resource://firefm/fmRemote.js");
  33.  
  34. /**
  35.  * FireFM chrome namespace. We need a separate one because this one is defined
  36.  * per window.
  37.  */
  38. if (typeof(FireFMChrome) == 'undefined') {
  39.   var FireFMChrome = {};
  40. };
  41.  
  42. /**
  43.  * Error dialog controller. Loads the dialog with the error information and
  44.  * sends the error report.
  45.  */
  46. FireFMChrome.ErrorDialog = {
  47.  
  48.   /* Logger for this object. */
  49.   _logger : null,
  50.  
  51.   /* Comment textbox */
  52.   _commentTextbox : null,
  53.   /* Exception textbox */
  54.   _exceptionTextbox : null,
  55.   /* Email checkbox */
  56.   _emailCheckbox : null,
  57.   /* Email textbox */
  58.   _emailTextbox : null,
  59.  
  60.   /**
  61.    * Initializes the object.
  62.    */
  63.   init : function() {
  64.     this._logger = FireFM.getLogger("FireFMChrome.ErrorDialog");
  65.     this._logger.debug("init");
  66.  
  67.     this._commentTextbox =
  68.       document.getElementById("firefm-error-comment-textbox");
  69.     this._exceptionTextbox =
  70.       document.getElementById("firefm-error-exception-textbox");
  71.     this._emailCheckbox =
  72.       document.getElementById("firefm-error-email-checkbox");
  73.     this._emailTextbox =
  74.       document.getElementById("firefm-error-email-textbox");
  75.  
  76.     // Load error info in the exception textbox
  77.     let ex = FireFM.PlayerInitializer.initializationException;
  78.  
  79.     if (ex) {
  80.       this._exceptionTextbox.value =
  81.         "Name: " + ex.name + "\n" +
  82.         "Message: " + ex.message + "\n" +
  83.         "File Name: " + ex.fileName + "\n" +
  84.         "Line Number: " + ex.lineNumber + "\n" +
  85.         "Stack:\n" + ex.stack + "\n" +
  86.         "User Agent: " + window.navigator.userAgent;
  87.     } else {
  88.       this._exceptionTextbox.value = "No error information available.";
  89.     }
  90.   },
  91.  
  92.   /**
  93.    * Enables/disables the email address textbox. If the textbox is going to be
  94.    * enabled and it contains the default message, its value is cleared.
  95.    * @param aEnable Whether to enable (true) or disable (false) the textbox.
  96.    */
  97.   enableEmail : function(aEnable) {
  98.     this._logger.debug("enableEmail");
  99.  
  100.     if (aEnable) {
  101.       this._emailTextbox.removeAttribute("disabled");
  102.       if (this._emailTextbox.getAttribute("hasDefaultLabel")) {
  103.         this._emailTextbox.setAttribute("value", "");
  104.         this._emailTextbox.removeAttribute("hasDefaultLabel");
  105.       }
  106.       this._emailTextbox.focus();
  107.     } else {
  108.       this._emailTextbox.setAttribute("disabled", true);
  109.     }
  110.   },
  111.  
  112.   /**
  113.    * Sends the error report.
  114.    */
  115.   sendReport : function() {
  116.     this._logger.debug("sendReport");
  117.  
  118.     let email = this._emailCheckbox.checked ? this._emailTextbox.value : "";
  119.  
  120.     let message =
  121.       "Exception:\n" + this._exceptionTextbox.value + "\n\n" +
  122.       "Email address: " + email + "\n\n" +
  123.       "Comments:\n" + this._commentTextbox.value;
  124.  
  125.     // XXX: Gotta run it in a thread created by another window,
  126.     // otherwise the request will not be sent.
  127.     window.opener.setTimeout(
  128.       function(aFireFMRemote, aMessage) {
  129.         aFireFMRemote.sendPlayerLoadError(aMessage);
  130.       },
  131.       0, FireFM.Remote, message);
  132.   }
  133. };
  134.  
  135. window.addEventListener(
  136.   "load", function() { FireFMChrome.ErrorDialog.init(); }, false);
  137.